
#region Using Statements

using System;
using System.Collections.Generic;
using System.Linq;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;


#endregion

namespace HumanElement.Xna.Construct
{
    /// <summary>
    /// Construct Game 
    /// </summary>
    public class Construct : IDisposable
    {
        /// <summary>
        /// Gets or sets the game engine.
        /// </summary>
        /// <value>The game engine.</value>
        public GameEngine GameEngine
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the host.
        /// </summary>
        /// <value>The host.</value>
        public GameHost<GameEngine> Host { get; set; }

        /// <summary>
        /// Gets or sets the last game time.
        /// </summary>
        /// <value>The last game time.</value>
        public GameTime LastGameTime { get; private set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="Construct"/> class.
        /// </summary>
        public Construct()
        {
            
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="Construct"/> class.
        /// </summary>
        /// <param name="game">The game.</param>
        public Construct(IGame game)
        {
            
        }

        /// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// </summary>
        public void Dispose()
        {
            Dispose(true);
        }

        /// <summary>
        /// Releases unmanaged and - optionally - managed resources
        /// </summary>
        /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
        public void Dispose(bool disposing)
        {
            if(disposing)
            {
                if (GameEngine == null)
                    return;

                this.GameEngine.Dispose();
            }
        }

        /// <summary>
        /// Loads the game.
        /// </summary>
        /// <param name="manifest">The manifest.</param>
        public void LoadGame(GameManifest manifest)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Tests the conntect.
        /// </summary>
        /// <returns></returns>
        public bool TestConntect()
        {
            throw new NotImplementedException();
        }
    }
}